
// 判断当前列表是否存在该id
export const existenceId = (list, id) => {
  const item = list.find(item => parseFloat(item.id) === parseFloat(id))
  return !!item
}

/**
 * @desc 万能省略，得数字数的。
 */
export function fnOmit (str, num, sign) {
  str = str || ''
  const len = str.length
  sign = sign || '...'
  // 首先，截取str指定的长度，然后，在后面加上"..."即可完成做任意多行的省略
  const str_ = str.substr(0, num)
  if (num >= len) {
    return str_
  } else {
    return str_ + sign
  }
}

// 少于两位的数字进行补位
const numberZeroize = n => {
  n = n.toString()
  return n[1] ? n : '0' + n
}

// 少于两位的数字进行补位
export function spliceFileName (str) {
  if (!str) return
  let newStr = ''
  str = str.replace(/.*\/([^/]+)+/, '$1')
  const fileStrArr = str.split('.')
  const fileType = fileStrArr[fileStrArr.length - 1]
  if (fileStrArr[0].length > 10) {
    newStr = `${fileStrArr[0].substring(0, 9)}...${fileType}`
  } else {
    newStr = `${fileStrArr[0]}.${fileType}`
  }
  return newStr
}

// 预览文件
export function previewFile(url) {
  window.open(url, '_blank')
}

/**
   * @desc 时间戳转化为日期格式
   * @param {Object} obj
   * @returns {Object}
   */
export function timeStampToTime (timestamp, format) {
  const date = timestamp ? new Date(timestamp) : new Date() // 时间戳为10位需*1000，时间戳为13位的话不需乘1000
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  // console.log(format)
  switch (format) {
    case 'Y-m-d H:i:s':
      return [year, month, day].map(numberZeroize).join('-') + ' ' + [hour, minute, second].map(numberZeroize).join(':')
    case 'Y-m-d H:i':
      return [year, month, day].map(numberZeroize).join('-') + ' ' + [hour, minute].map(numberZeroize).join(':')
    case 'Y-m-d':
      return [year, month, day].map(numberZeroize).join('-')
    case 'Y':
      return year
    default:
      return '' + year + month + day
  }
}

// 允许输入一位小数
export function editInput ($event, item) {
  item = ('' + $event)
    .replace(/[^\d.]/g, '') // 将非数字和点以外的字符替换成空
    .replace(/^\./g, '') // 验证第一个字符是数字而不是点
    .replace(/\.{2,}/g, '.') // 出现多个点时只保留第一个
    .replace('.', '$#$') // 1、将数字的点替换成复杂字符$#$
    .replace(/\./g, '') // 2、将字符串的点直接清掉
    .replace('$#$', '.') // 3、将复杂字符再转换回点
    // .replace(/^(\\-)*(\d+)\.(\d).*$/, '$1$2.$3') // 只能输入两个小数
    .replace(/^(\\-)*(\d+)\.(\d).*$/, '$1$2.$3') // 只能输入1个小数
  if (item.indexOf('.') < 0 && item !== '') {
    item = parseFloat(item)
  } else if (item.indexOf('.') > 1 && item[0] === '0') {
    item = parseFloat(item)
  }
  return item
}

// 格式化状态
export function formatterStatus (val, list) {
  if (val === null) return '-'
  const item = list.find((item) => item.value === val)
  return item ? item.label : '-'
}

// 函数节流
export function throttle(fn, gapTime) {
  if (gapTime == null || gapTime == undefined) {
    gapTime = 1500
  }

  let _lastTime = null

  // 返回新的函数
  return function () {
    const _nowTime = +new Date()
    if (_nowTime - _lastTime > gapTime || !_lastTime) {
      fn.apply(this, arguments) // 将this和参数传给原函数
      _lastTime = _nowTime
    }
  }
}

// 价格取整数或取小数部分
export function formatPriceFloat(price, type) {
  price = price || 0
  if (type == 'float') {
    return (price / 1000).toString().indexOf('.') > -1 ? '.' + parseFloat(price / 1000).toFixed(1).split('.')[1] : ''
  } else {
    return (price / 1000).toString().indexOf('.') > -1 ? parseFloat(price / 1000).toFixed(1).split('.')[0] : parseFloat(price / 1000)
  }
}
